{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6e98b87e",
   "metadata": {},
   "source": [
    "# Excel"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a139485",
   "metadata": {},
   "source": [
    "`UnstructuredExcelLoader`는 `Microsoft Excel` 파일을 로드하는 데 사용됩니다. \n",
    "\n",
    "이 로더는 `.xlsx` 및 `.xls` 파일 모두에서 작동합니다. 페이지 내용은 Excel 파일의 원시 텍스트가 됩니다. \n",
    "\n",
    "`\"elements\"` 모드에서 로더를 사용하는 경우, 문서 메타데이터의 `text_as_html` 키 아래에서 Excel 파일의 HTML 표현이 제공됩니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "df35665c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 설치\n",
    "# !pip install -qU langchain-community unstructured openpyxl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81b3aa50",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import UnstructuredExcelLoader\n",
    "\n",
    "# UnstructuredExcelLoader 생성\n",
    "loader = UnstructuredExcelLoader(\"./data/titanic.xlsx\", mode=\"elements\")\n",
    "\n",
    "# 문서 로드\n",
    "docs = loader.load()\n",
    "\n",
    "# 문서 길이 출력\n",
    "print(len(docs))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a42127e",
   "metadata": {},
   "source": [
    "1개의 문서로 로드되었음을 확인합니다. \n",
    "\n",
    "`page_content` 에는 각 행의 데이터가 저장되고, `metadata` 의 `text_as_html` 에는 각 행의 데이터를 HTML 형식으로 저장합니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd6528e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 문서 출력\n",
    "print(docs[0].page_content[:200])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d385dbbb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# metadata 의 text_as_html 출력\n",
    "print(docs[0].metadata[\"text_as_html\"][:1000])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3162579",
   "metadata": {},
   "source": [
    "## DataFrameLoader\n",
    "\n",
    "- CSV 파일과 마찬가지로 Excel 파일을 로드하는 `read_excel()` 기능을 사용하여 DataFrame 으로 만든 뒤, 로드합니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8222709",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# Excel 파일 읽기\n",
    "df = pd.read_excel(\"./data/titanic.xlsx\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c558fb8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import DataFrameLoader\n",
    "\n",
    "# 데이터 프레임 로더 설정, 페이지 내용 컬럼 지정\n",
    "loader = DataFrameLoader(df, page_content_column=\"Name\")\n",
    "\n",
    "# 문서 로드\n",
    "docs = loader.load()\n",
    "\n",
    "# 데이터 출력\n",
    "print(docs[0].page_content)\n",
    "\n",
    "# 메타데이터 출력\n",
    "print(docs[0].metadata)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py-test",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
